8 U$="[197][197][197][197][197][197][197][197][197]":V$="[164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164]" 9 A$="[176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]":B$=" ":C$="[173][192][177][192][177][192][177][192][177][192][177][192][177][192][177][192][189]" 10 PRINT"[147][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164]" 20 PRINT"SYNTAX-LEHRGANG 'MASCHINENSPRACHE' (1)" 30 PRINT"DIE IDEE ZU DIESEM LEHRGANG WURDE VON" 40 PRINT"EINIGEN UNSERER ABONNENTEN VERGANGENEN" 50 PRINT"HERBST AUF DER HOBBYTRONIC IN STUTTGART" 60 PRINT"ANGEREGT. DIE WENIG SPAETER WAEHREND" 70 PRINT"EINES WOCHENENDSEMINARS UEBER 'DIE PRO-" 80 PRINT"GRAAMMIERUNG DER 6502-CPU' GEWONNENEN" 90 PRINT"ERFAHRUNGEN FUEHRTEN ZU DIESEM LEHRGANG" 100 PRINT"WESENTLICHE VORKENNTNISSE SIND NICHT" 110 PRINT"ERFORDERLICH." 120 I=1:GOSUB5000:IFFLTHEN10 300 PRINT"[147][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164]":PRINT"1. DIE 6502-CPU":PRINT"[164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164][164] 310 [153]"1.1. DIE HARDWAREWAIT (DIE INNERE STRUKTUR)" 320 [153]"DIE 6502-CPU HAT EINE BUSSTRUKTUR. ALLE" 330 [153]"INTERNEN EINHEITEN SIND DURCH EINEN BUS" 340 [153]"VERBUNDEN. UNTER EINEM BUS VERSTEHT MAN 350 PRINT"EINE MEHRDRAEHTIGE PARALLEL-VERBINDUNG 360 [153]"ZWISCHEN ALLEN TEILSYSTEMEN DER CPU. 370 PRINT"INNERHALB DER CPU GIBT ES ZWEI WICHTIGE 380 [153]"BUSSE: DEN DATENBUS UND":[153][163]15)U$ 390 [153]" DEN ADRESSBUS":[153][163]15)U$ 400 I[178]2:[141]5000:[139]FL[167]10 500 [153]"LOADDER DATENBUS UEBERTRAEGT":[153][163]4)U$ 510 [153]" 1. DATEN UND 520 PRINT" 2. CODIERTE BEFEHLE 530 [153]"INNERHALB DER CPU, UND ZWISCHEN CPU UND 540 PRINT"AN DIE CPU ANGESCHLOSSENEN EINHEITEN, 550 [153]"Z.B. DEN EXTERNEN SPEICHERN ('RAMS'). 560 PRINT"DER DATENBUS HAT EINE BREITE VON 8 BIT. 570 [153]"8 BIT NENNT MAN EIN 'WORT' ODER 'BYTE'." 580 [153]"GANZ ENTSPRECHEND SPRICHT MAN VON EINEM 585 PRINT"'DATENWORT' ODER EINEM 'BEFEHLSWORT'. 590 [153]"DAHER GEHOERT DIE 6502-CPU ZUR FAMILIE 600 PRINT"DER 8-BIT-PROZESSOREN. 610 I[178]3:[141]5000:[139]FL[167]300 700 [153]"LOADOB EIN AM DATENBUS ANLIEGENDES BYTE EIN 710 PRINT"DATEN- ODER BEBEHLSBYTE IST, WEISS DIE 720 [153]"CPU NICHT A PRIORI. VIELMEHR MUSS DER 730 PRINT"PROGRAMMIERER SEIN PROGRAMM DERART AUF- 740 [153]"BAUEN, DASS FEHLINTERPRETATIONEN AUSGE- 750 PRINT"SCHLOSSEN SIND. DERARTIGE FEHLINTERPRE- 760 [153]"TATIONEN ENDEN I.A. IN UNKONTROLLIERTEN 770 PRINT"PROGRAMMABLAEUFEN (DER RECHNER 'SPRINGT 780 [153]"IN DIE WUESTE'..) 790 PRINT"SIE SIND DAHER PEINLICH ZU VERMEIDEN. 810 I[178]4:[141]5000:[139]FL[167]500 900 [153]"LOADDER ADRESSBUS:":[153][163]4)U$ 910 [153]"WENN DIE CPU UEBER DENCLOSE DATENBUS EIN 920 PRINT"EINZELNES BYTE AUS EINEM DER EXTERNEN 930 [153]"SPEICHER ('RAMS') UEBERTRAGEN SOLL, SO 940 PRINT"MUSS DIE CPU GENAU ANGEBEN, AUS WELCHEM 950 [153]"DER SEHR VIELEN SPEICHERPLAETZE DIESES 960 PRINT"BYTE GELESEN WERDEN SOLL. DAZU LEGT SIE 970 [153]"DIE ADRESSE DES GEWUENSCHTEN SPEICHER- 980 PRINT"PLATZES AN DEN ADRESSBUS. DIE EXTERNE 990 [153]"SPEICHEREINHEIT WEISS DANN, WELCHER DER 1000 PRINT"VIELEN SPEICHERPLAETZE GEMEINT IST. 1010 I[178]5:[141]5000:[139]FL[167]700 1100 [153]"LOADDER ADRESSBUS UMFASST 16 BIT, ALSO ZWEI 1110 PRINT"BYTE. DAMIT IST ER DOPPELT SO BREIT WIE 1120 [153]"DER DATENBUS. MIT 16 BIT KANN DIE CPU 1130 PRINT"65536 VERSCHIEDENE ADRESSEN ANWAEHLEN. 1140 [153]"FUER DAS ERLERNEN DES PROGRAMMIERENS IN 1150 PRINT"MASCHINENSPRACHE SIND WEITERGEHENDE 1160 [153]"KENNTNISSE DER HARDWARE NICHT NOETIG. 1180 PRINT"WICHTIGER IST ES, DIE SOFTWARESTRUKTUR 1190 [153]"DER CPU (NAECHSTES KAPITEL) ZU KENNEN. 1210 I=6:GOSUB5000:IFFLTHEN900 1300 PRINT"[147]"LEFT$(V$,17):PRINT"1.2. DIE SOFTWARE 1305 [153][200](V$,28):[153]"1.2.1. EIN PROGRAMMIERMODELL 1310 PRINT"FUER DEN PROGRAMMIERER IST WESENTLICH, 1320 [153]"DIE FUNKTION DER INTERNEN REGISTER DER 1330 PRINT"CPU ZU VERSTEHEN. DIE CPU BESITZT 6 IN- 1340 [153]"TERNE REGISTER. SIE DUERFEN NICHT MIT":[153][163]18)U$;U$"VALVALVAL 1350 PRINT"EXTERNEN SPEICHERN VERWECHSELT WERDEN!":PRINTU$;U$;U$;U$;"[197][197] 1360 [153]"DIE NAECHSTE SEITE ZEIGT CLOSESCHEMATISCH 1380 PRINT"DIE 6 REGISTER. SIE WERDEN AUF DEN FOL- 1390 [153]"GENDEN SEITEN IM EINZELNEN VORGESTELLT. 1410 I=7:GOSUB5000:IFFLTHEN1100 1500 L=16:PRINT"[147]CPU 6502":PRINTU$:PRINT"(SCHEMA)"; 1520 FORI=0TO5:GOSUB5100:NEXT 1530 PRINT""TAB(35)"AC[157][157]XR[157][157]YR 1540 [153]A$"CMD=":[153]"(null)"[163]35)"PC":[153]C$"CMD>" 1550 [153][163]13)"ORTANTAN=":[153][163]13)"(null)01"[163]35)"SP":[153][163]13)"/TANTAN> 1560 S$="NVBDIZCSR":PRINTTAB(17)S$ 1570 PRINT"[161]AC: ACCUMULATOR[160] [161]PC: PROGRAM COUNTER 1580 [153]"GETXR: X-REGISTER CLOSE GETSP: STACK-POINTER 1590 PRINT"[161]YR: Y-REGISTER [161]SR: STATUS-REGISTER 1610 I[178]8:[141]5000:[139]FL[167]1300 1700 [153]"LOADDER ACCUMULATOR :":[153]U$;U$ 1710 L[178]8:[141]5100:[153][163]26)"ONONAC 1720 PRINT"DER AC IST EIN 8-BIT-REGISTER. ER IST 1730 [153]"DAS HAUPT-RECHEN-REGISTER DER CPU.":[153][163]4)U$;U$"VALVALVAL 1740 PRINT"IM AC ERSCHEINEN DIE ERGEBNISSE ARITH- 1750 [153]"METISCHER ODER LOGISCHER OPERATIONEN. 1760 PRINT"BEI DATENTRANSFERS ZWISCHEN EXTERNEN 1770 [153]"SPEICHERZELLEN BENUTZT MAN I.A. DEN AC 1780 PRINT"ALS ZWISCHENSPEICHER. 1810 I[178]9:[141]5000:[139]FL[167]1500 1900 [153]"LOADBEISPIEL: ES SOLL DER INHALT DER SPEI-":[153]U$ 1910 [153]"CHERZELLE 0 IN SPEICHERZELLE 1 UEBER- 1920 PRINT"TRAGEN WERDEN. (DATENTRANSFER) 1930 [153]"LOESUNG : DIE CPU KENNT KEINEN BEFEHL,":[153]U$ 1940 [153]"DER DEN INHALT EINES SPEICHERS IN EINEN 1950 PRINT"ANDEREN KOPIERT. ABER SIE KENNT ZWEI 1960 [153]"ANDERE BEFEHLE: CLOSE1. LADE DEN INHALT EI- 1970 PRINT"NES BESTIMMTEN SPEICHERS IN DEN AC, UND 1980 [153]"2. SPEICHERE DEN AC-INHALT IN EINEM BE- 1990 PRINT"STIMMTEN SPEICHER AB. ES GEHT ALSO NUR 2000 [153]"MIT DEM AC ALS ZWISCHENSPEICHER. 2010 I=10:GOSUB5000:IFFLTHEN1700 2100 PRINT"[147]X-REGISTER UND Y-REGISTER :":PRINTU$;U$;U$ 2110 GOSUB5100:PRINTTAB(26)"[145][145]XR,YR 2120 [153]"XR UND YR WERDEN - WIE DER AC - OFT ALS 2130 PRINT"ZWISCHENSPEICHER VERWENDET. SIE KOENNEN 2140 [153]"EINIGE ARITHMETISCHE OPERATIONEN DURCH- 2150 PRINT"FUEHREN. IHRE WICHTIGSTE ANWENDUNG FIN- 2160 [153]"DEN SIE ABER BEI INDIREKTEN UND BEI IN- 2170 PRINT"DIZIERTEN ADRESSIERUNGEN. DAHER NENNT 2180 [153]"MAN XR UND YR AUCH INDEXREGISTER. WIR":[153][163]21)U$"VALVALVALVAL 2190 PRINT"KOMMEN DARAUF SPAETER NOCH AUSFUEHRLICH 2200 [153]"ZURUECK. 2210 I=11:GOSUB5000:IFFLTHEN1900 2300 PRINT"[147]BEISPIELE:":PRINTU$ 2310 PRINT"1. ZUM DATENTRANSFER (LETZTES BEISPIEL) 2320 [153]"KANN MAN AUCH DAS XR ODER YR VERWENDEN. 2330 PRINT"2. DIE IN 'BASIC' SO WICHTIGE SCHLEIFE: 2340 [153]"FORI=..TO..:NEXT LAESST SICH IN MASCHI- 2350 PRINT"NENSPRACHE LEICHT MIT EINEM DER INDEX- 2360 [153]"REGISTER DURCHFUEHREN. 2370 PRINT"3. DIE BEHANDLUNG VON DIMENSIONIERTEN 2380 [153]"VARIABLEN (BASIC: A$(I), NR(J)) GELINGT 2390 PRINT"MIT DEN INDEXREGISTERN RECHT EINFACH. 2410 I[178]12:[141]5000:[139]FL[167]2100 2500 [153]"LOADTOTOTOTOTOTOTOTO":[153]"AUFGABENWAIT: 2510 PRINT"1. MACHEN SIE SICH DEN UNTERSCHIED KLAR 2520 [153]"ZWISCHEN EINEM INTERNEN UND EINEM EX- 2530 PRINT"TERNEN SPEICHER. (SEHR WICHTIG!) 2540 [153]"2. WIE KANN MAN EINEN DATENTRANSFER MIT 2550 PRINT"XR (YR) VON SPEICHER 0 NACH 1 MACHEN ? 2560 [153]"3. WIE KOENNTE MAN EINEN DATENAUSTAUSCH":[153][163]30)U$ 2580 [153]"ZWISCHEN ZWEI SPEICHERN DURCHFUEHREN ? 2590 PRINT"(HINWEIS: SIE MUESSEN ZWEIMAL ZWISCHEN- 2600 [153]"SPEICHERN!) 2610 PRINT" - SEITE 13 - <+> [145][164][164][164][164][157][157][157][157]ENDE[146] <-> VON VORNE"; 2620 GOSUB5020:ONFLGOTO10:PRINT"[147]":END:RUN 4999 END 5000 REM UMBLAETTERN 5010 PRINT" - SEITE";I;"- <+> WEITER <-> ZURUECK"; 5020 FORI=0TO11:GETX$:NEXT 5030 GETX$:IFX$=""THEN5030 5040 IFX$="+"THENFL=0:RETURN 5050 IFX$="-"THENFL=1:RETURN 5060 GOTO5030 5100 PRINTTAB(L)A$:PRINTTAB(L)"[221]";B$;"[221]":PRINTTAB(L)C$:RETURN